package com.smart.translator.utils;

import android.content.Context;
import com.smart.translator.utils.KeyPositionUtils.Point;
import com.smart.translator.utils.KeyPositionUtils.ButtonInfo;

/**
 * 键位位置工具使用指南
 * 展示如何使用KeyPositionUtils根据包名获取按钮位置
 */
public class KeyPositionUsageGuide {
    
    /**
     * 使用指南：基本用法
     */
    public static void basicUsage(Context context) {
        System.out.println("=== 基本用法 ===");
        
        // 1. 根据包名获取微信输入框位置
        Point wechatInput = KeyPositionUtils.getButtonPositionByPackage(
            context, "com.tencent.mm", KeyPositionUtils.ID_INPUT_NO_IME);
        System.out.println("微信输入框位置: " + wechatInput);
        
        // 2. 根据包名获取微信发送按钮位置
        Point wechatSend = KeyPositionUtils.getButtonPositionByPackage(
            context, "com.tencent.mm", KeyPositionUtils.ID_SEND_NO_IME);
        System.out.println("微信发送按钮位置: " + wechatSend);
        
        // 3. 根据包名获取QQ输入框位置
        Point qqInput = KeyPositionUtils.getButtonPositionByPackage(
            context, "com.tencent.mobileqq", KeyPositionUtils.ID_INPUT_NO_IME);
        System.out.println("QQ输入框位置: " + qqInput);
    }
    
    /**
     * 使用指南：检查按钮是否存在
     */
    public static void checkButtonExists(Context context) {
        System.out.println("=== 检查按钮是否存在 ===");
        
        // 检查微信输入框按钮是否存在
        boolean wechatInputExists = KeyPositionUtils.isButtonExistsByPackage(
            context, "com.tencent.mm", KeyPositionUtils.ID_INPUT_NO_IME);
        System.out.println("微信输入框按钮存在: " + wechatInputExists);
        
        // 检查QQ发送按钮是否存在
        boolean qqSendExists = KeyPositionUtils.isButtonExistsByPackage(
            context, "com.tencent.mobileqq", KeyPositionUtils.ID_SEND_NO_IME);
        System.out.println("QQ发送按钮存在: " + qqSendExists);
    }
    
    /**
     * 使用指南：获取所有按钮信息
     */
    public static void getAllButtonInfo(Context context) {
        System.out.println("=== 获取所有按钮信息 ===");
        
        // 获取微信的所有按钮信息
        ButtonInfo[] wechatButtons = KeyPositionUtils.getAllButtonPositionsByPackage(
            context, "com.tencent.mm");
        System.out.println("微信按钮数量: " + wechatButtons.length);
        for (ButtonInfo button : wechatButtons) {
            System.out.println("ID: " + button.groupId + 
                             ", 位置: (" + button.x + ", " + button.y + 
                             "), 描述: " + button.description);
        }
        
        // 获取QQ的所有按钮信息
        ButtonInfo[] qqButtons = KeyPositionUtils.getAllButtonPositionsByPackage(
            context, "com.tencent.mobileqq");
        System.out.println("QQ按钮数量: " + qqButtons.length);
        for (ButtonInfo button : qqButtons) {
            System.out.println("ID: " + button.groupId + 
                             ", 位置: (" + button.x + ", " + button.y + 
                             "), 描述: " + button.description);
        }
    }
    
    /**
     * 使用指南：包名和分组转换
     */
    public static void packageGroupConversion() {
        System.out.println("=== 包名和分组转换 ===");
        
        // 根据包名获取分组名称
        int wechatGroupIndex = KeyPositionUtils.getGroupIndexByPackage("com.tencent.mm");
        String wechatGroup = (wechatGroupIndex >= 0) ? KeyPositionUtils.GROUP_NAMES[wechatGroupIndex] : "未知";
        System.out.println("微信包名对应的分组: " + wechatGroup);
        
        // 根据分组名称获取包名
        String wechatPackage = KeyPositionUtils.getPackageByGroupName("微信");
        System.out.println("微信分组对应的包名: " + wechatPackage);
        
        // 获取所有支持的包名
        String[] packages = KeyPositionUtils.getSupportedPackages();
        System.out.println("支持的包名列表:");
        for (int i = 0; i < packages.length; i++) {
            String groupName = KeyPositionUtils.GROUP_NAMES[i];
            System.out.println(i + ": " + packages[i] + " (" + groupName + ")");
        }
    }
    
    /**
     * 使用指南：实际应用场景
     */
    public static void practicalUsage(Context context) {
        System.out.println("=== 实际应用场景 ===");
        
        // 场景1：检测当前应用并获取对应按钮位置
        String currentPackage = "com.tencent.mm"; // 假设当前在微信
        
        if (KeyPositionUtils.isButtonExistsByPackage(context, currentPackage, KeyPositionUtils.ID_INPUT_NO_IME)) {
            Point inputPosition = KeyPositionUtils.getButtonPositionByPackage(
                context, currentPackage, KeyPositionUtils.ID_INPUT_NO_IME);
            System.out.println("可以点击输入框，位置: " + inputPosition);
            // 执行点击操作
            // performClick(inputPosition.x, inputPosition.y);
        }
        
        // 场景2：批量获取某个应用的所有按钮
        ButtonInfo[] allButtons = KeyPositionUtils.getAllButtonPositionsByPackage(
            context, currentPackage);
        System.out.println("当前应用有 " + allButtons.length + " 个配置的按钮");
        
        // 场景3：检查应用是否完整配置
        int configuredCount = KeyPositionUtils.getConfiguredButtonCountByPackage(
            context, currentPackage);
        if (configuredCount == 4) {
            System.out.println("应用已完整配置所有4个按钮");
        } else {
            System.out.println("应用只配置了 " + configuredCount + " 个按钮");
        }
    }
    
    /**
     * 使用指南：错误处理
     */
    public static void errorHandling(Context context) {
        System.out.println("=== 错误处理 ===");
        
        // 处理不存在的包名
        Point invalidPackage = KeyPositionUtils.getButtonPositionByPackage(
            context, "com.invalid.package", KeyPositionUtils.ID_INPUT_NO_IME);
        if (invalidPackage == null) {
            System.out.println("无效包名，未找到按钮位置");
        }
        
        // 处理不存在的按钮ID
        Point invalidId = KeyPositionUtils.getButtonPositionByPackage(
            context, "com.tencent.mm", 999);
        if (invalidId == null) {
            System.out.println("无效ID，未找到按钮位置");
        }
        
        // 处理空包名
        Point emptyPackage = KeyPositionUtils.getButtonPositionByPackage(
            context, "", KeyPositionUtils.ID_INPUT_NO_IME);
        if (emptyPackage == null) {
            System.out.println("空包名，未找到按钮位置");
        }
    }
    
    /**
     * 使用指南：完整示例
     */
    public static void completeExample(Context context) {
        System.out.println("=== 完整示例 ===");
        
        // 定义目标应用包名
        String targetPackage = "com.tencent.mm";
        
        // 1. 检查应用是否支持
        int groupIndex = KeyPositionUtils.getGroupIndexByPackage(targetPackage);
        if (groupIndex == -1) {
            System.out.println("不支持的应用包名: " + targetPackage);
            return;
        }
        
        // 2. 获取应用名称
        String appName = KeyPositionUtils.GROUP_NAMES[groupIndex];
        System.out.println("目标应用: " + appName);
        
        // 3. 检查按钮配置情况
        int buttonCount = KeyPositionUtils.getConfiguredButtonCountByPackage(context, targetPackage);
        System.out.println("已配置按钮数量: " + buttonCount);
        
        // 4. 获取所有按钮信息
        ButtonInfo[] buttons = KeyPositionUtils.getAllButtonPositionsByPackage(context, targetPackage);
        System.out.println("按钮详细信息:");
        for (ButtonInfo button : buttons) {
            String idName = getButtonIdName(button.groupId);
            System.out.println("- " + idName + ": (" + button.x + ", " + button.y + ") - " + button.description);
        }
        
        // 5. 模拟点击操作
        if (KeyPositionUtils.isButtonExistsByPackage(context, targetPackage, KeyPositionUtils.ID_INPUT_NO_IME)) {
            Point inputPos = KeyPositionUtils.getButtonPositionByPackage(
                context, targetPackage, KeyPositionUtils.ID_INPUT_NO_IME);
            System.out.println("执行点击输入框操作，位置: " + inputPos);
            // performClick(inputPos.x, inputPos.y);
        }
    }
    
    /**
     * 获取按钮ID的名称描述
     */
    private static String getButtonIdName(int groupId) {
        switch (groupId) {
            case KeyPositionUtils.ID_INPUT_NO_IME:
                return "未调起输入法点击输入框";
            case KeyPositionUtils.ID_SEND_NO_IME:
                return "未调起输入法点击发送按钮";
            case KeyPositionUtils.ID_INPUT_WITH_IME:
                return "调起输入法点击输入框";
            case KeyPositionUtils.ID_SEND_WITH_IME:
                return "调起输入法点击发送按钮";
            default:
                return "未知ID: " + groupId;
        }
    }
} 